var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var RightRouter = require('./routes/RightRouter');
var RoleRouter = require('./routes/RoleRouter');
var UserRouter = require('./routes/UserRouter');
var TagRouter = require('./routes/TagRouter');
var ClassRouter = require('./routes/ClassRouter');
var StudentRouter = require('./routes/StudentRouter');

// 引入jwt
const JWT = require('./utils/jwt');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 在路由之前，先进行token验证
app.use((req, res, next)=> {
  if (req.url == "/adminapi/users/login") {
    next();
    return;
  }else{
    let token = req.headers["authorization"]?.split(" ")[1];
    if(token){
      let result = JWT.verify(token);
      if (result) {
        const newToken = JWT.generate({
          _id: result._id,
          usernam:result.username
        }, "1d");
        res.header("Authorization", newToken);
        next();
      } else {
        res.status(401).send({errorCode:-1,errorInfo:"token验证失败"})
      }
    }else{
      res.status(401).send({errorCode:-2,errorInfo:"未授权"})
    }
    
  }
})

app.use(RightRouter);
app.use(RoleRouter);
app.use(UserRouter);
app.use(TagRouter);
app.use(ClassRouter);
app.use(StudentRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
